package com.briup.smartcity.service.impl;

import com.briup.smartcity.bean.Carousel;
import com.briup.smartcity.exception.ServiceException;
import com.briup.smartcity.mapper.CarouselMapper;
import com.briup.smartcity.mapper.extend.CarouselExtendMapper;
import com.briup.smartcity.service.ICarouselService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class CarouselServiceImpl implements ICarouselService {
    @Autowired
    private CarouselMapper mapper; //轮播图mapper实现简单查询
    @Autowired
    private CarouselExtendMapper extendMapper;//实现复杂查询

    @Override
    public PageInfo<Carousel> findAll(int pageNum, int pageSize) throws ServiceException {
        //1.设置分页信息
        PageHelper.startPage(pageNum,pageSize,true);
        //2.查询所有的轮播图信息
        List<Carousel> list = extendMapper.findAllCarousel();
        //3.将list对象封装到PageInfo对象
        return new PageInfo<>(list);
    }

    @Override
    public void deleteById(int id) throws ServiceException {
        /*
            3.调用mapper对象执行删除的sql语句
            1.简单的操作 ，只要使用逆向工程生成的mapper对象
            2.复杂操作： 必须自己定义扩展Mapper 扩展XML

         */
        /*
        扩展思路： 如果查询数据库发现id不存在，提供一个提示信息告诉
        该用户轮播图已经不存在。
               当用户删除最后一个轮播图，提示用户不能删除全部，
               用户删除失败。
         不能删除正在启动中的轮播图
         */
        /*if(最后一张轮播图){
            throw new ServiceException("不能删除全部轮播图");
        }*/
        List<Carousel> all = extendMapper.findAllCarousel();
//        while (all.size()>0){
//            mapper.deleteByPrimaryKey(id);
//        }

//不能删除全部
        if(1<all.size()){
            mapper.deleteByPrimaryKey(id);
        }
        else {
            throw new ServiceException("不能删除全部轮播图");
        }

    }

    @Override
    public void saveCarousel(Carousel carousel) throws ServiceException {
        //修改web层传递的参数对象 ，轮播图默认的状态是禁用状态=0
        carousel.setCarouselStatus(0); //逻辑完整的代码
        //1.直接使用Mapper对象进行保存
        mapper.insertSelective(carousel);

        /**
         * 思路2： 将设置默认状态的操作交给sql语句 或者
         * mysql 建表设置
         * create  table t_student(
         *    t_name defualt null
         * )
         *
         *
         */
    }

    @Override
    public void updateCarousel(Carousel carousel) throws ServiceException {
        //扩展： 提供一个逻辑表示当前轮播图的最少有一个开启状态？
        // 1   1
        //1.查询所有的开启的轮播图信息
        Integer carouselId = carousel.getCarouselId();
        Integer status = carousel.getCarouselStatus();
        List<Carousel> list = extendMapper.findAllYesCarousel();
        //逻辑：当前修改的开启轮播图是最后一个
        if(list.size() == 1 && list.get(0).getCarouselId() == carouselId && status== 0){
            throw new ServiceException("最少有一个开启状态");
        }
        //扩展： 设置轮播图每次最多开启 5个 提示用户每次最多开启5个轮播图

        if(list.size() >4 && status== 1){
            throw new ServiceException("设置轮播图每次最多开启 5个");
        }
        mapper.updateByPrimaryKeySelective(carousel);


    }

    @Override
    public List<Carousel> findYesCarousel() throws ServiceException {
        //1.根据查询功能，需要自定义Mapper和xml的查询功能

        return extendMapper.findAllYesCarousel();
    }
}
